package com.fh.mapper.loan;

import com.fh.model.Page;
import com.fh.model.loan.CallLoanInfo;
import com.fh.model.loan.CallLoanInfoDto;
import com.fh.model.loan.CallLoanInfoExample;
import com.fh.model.loan.HisOverdueBillInfo;
import com.fh.util.PageData;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

public interface CallLoanInfoMapper {
	int countByExample(CallLoanInfoExample example);

	CallLoanInfo  findCallLoanInfoSingle(Map<String,Object> mao);

	int deleteByExample(CallLoanInfoExample example);

	int deleteByPrimaryKey(Integer id);

	/**
	 * 插入跑批数据
	 *
	 * @param record
	 * @return
	 */
	int insert(CallLoanInfo record);

	int insertSelective(CallLoanInfo record);

	List<CallLoanInfo> selectByExample(CallLoanInfoExample example);

	CallLoanInfo selectByPrimaryKey(Integer id);

	int updateByExampleSelective(@Param("record") CallLoanInfo record, @Param("example") CallLoanInfoExample example);

	int updateByExample(@Param("record") CallLoanInfo record, @Param("example") CallLoanInfoExample example);

	int updateByPrimaryKeySelective(CallLoanInfo record);

	int updateByPrimaryKey(CallLoanInfo record);

	/**
	 * 罚息减免列表
	 *
	 * @param page
	 * @return
	 */
	List<PageData> findFaxiPage(Page page);

	/**
	 * 催款案件列表
	 *
	 * @param page
	 * @return
	 */
	List<PageData> findistPage1(Page page);

	/**
	 * 罚息减免申请
	 *
	 * @param id
	 * @return
	 */
	CallLoanInfo faxijianmianApplyById(String callLoanNid);

	/**
	 * 催收中列表
	 *
	 * @param page
	 * @return
	 */
	List<PageData> findTaskPListPage(Page page);

	/**
	 * 标记案件 根据标id修改案件的callRemark
	 *
	 * @param ids
	 * @param updateTime
	 * @return int
	 */
	int updateCallRemarkStatus(Map<String, Object> para);

	/**
	 * 单笔审核
	 *
	 * @param callLoanInfo
	 */
	int updateByAuditOne(CallLoanInfo callLoanInfo);

	/**
	 * 根据userId获取CallLoanInfo
	 *
	 * @param userId
	 */
	CallLoanInfo findCallLoanInfoByUserId(Map<String, Object> map);

	/**
	 * 根据userId获取CallLoanInfo
	 *
	 * @param userId
	 */
	List<HisOverdueBillInfo> findHisOverdueBillInfo(Map<String, Object> map);

	/**
	 * 批量修改催收
	 *
	 * @param para
	 * @return
	 */
	int updateUserIds(Map<String, Object> para);

	/**
	 * 催收中批量分派
	 *
	 * @param para
	 * @return
	 */
	int updateUserIdsByToBe(Map<String, Object> para);

	/**
	 * 已结案列表
	 *
	 * @param page
	 * @return
	 */
	//List<PageData> findTaskOverListPage(Page page);

	/**
	 * 已结案导出
	 *
	 * @param map
	 * @return
	 */
	//List<PageData> callLoanOverExl(Page page);

	/**
	 * 批量导出
	 *
	 * @param map
	 * @return
	 */
	List<PageData> findListInfo(Page page);

	List<PageData> infoBeList2(Page page);

	/**
	 * 待催收中手动分派
	 *
	 * @param callLoanInfoDto
	 * @return
	 */
	int saveCallInfoBYInterFace(CallLoanInfoDto callLoanInfoDto);

	/**
	 * 查询案件是否存在
	 *
	 * @param callLoanInfoDto
	 * @return
	 */
	CallLoanInfoDto fetchByRepaymentId(CallLoanInfoDto callLoanInfoDto);

	/**
	 * 更新案件，逾期天数、逾期金额、催收状态
	 *
	 * @param callLoanInfoDto
	 * @return
	 */
	int updateByMQ(CallLoanInfoDto callLoanInfoDto);

	/**
	 * 待催收列表
	 *
	 * @param page
	 * @return
	 */
	List<PageData> findTaskToBeListPage(Page page);

	List<PageData> findTaskToBe2(Page page);

	List<CallLoanInfo> findAllListdaiandzhong();

	/**
	 * 通过还款订单号查询是否存在该案件(并且状态不为已结案)
	 *
	 * @param repaymentId
	 * @return
	 */
	CallLoanInfo selectByRepaymentId(String repaymentId);

	//获取结案的案件信息
	CallLoanInfo selectCaseOverByRepaymentId(String repaymentId);

	int update(CallLoanInfo info);

	/**
	 * 跑批更改案件为已结案
	 *
	 * @param repaymentId
	 * @param status
	 * @return
	 */
	int updateByRepIdPaopi(CallLoanInfo info);

	/**
	 * 逾期金额排序
	 *
	 * @param page
	 * @return
	 */
	List<PageData> overAmountOrdListPage(Page page);
	/**
	 * 委外派催收中列表
	 *
	 * @param page
	 * @return
	 */
	List<PageData> findAssignMPage(Page page);
	/**
	 * 新增委外
	 * @param callLoanNid
	 */
	int updateByWeiwai(CallLoanInfo CallLoanInfo);
	/**
	 * 委外结案
	 * @param page
	 * @return
	 */
	//List<PageData> findAssignEndPage(Page page);
	/**
	 * 待催收批量委外
	 * @param map
	 */
	int updateByIdWeiwai(Map<String, Object> map);
	/**
	 * 导出Excel委外催收中的数据
	 * @param page
	 * @return
	 */
	List<PageData> findAssignMExcel(Page page);
	/**
	 * 导出Excel委外结案的数据
	 * @param page
	 * @return
	 */
	//List<PageData> findAssignEndExcel(Page page);

	/**
	 * 催收查询
	 * @param page
	 * @return
	 */
	List<PageData> findGeneralViewListPage(Page page);

	/**
	 * 委外待催收
	 * @param page
	 * @return
	 */
	List<PageData> selectAssignStartListPage(Page page);

	/**
	 * 委外待催收导出
	 * @param page
	 * @return
	 */
	List<PageData> selectAssignStartExcelPage(Page page);

	/**
	 * 委外待催收批量分派
	 * @param map
	 * @return
	 */
	int insertAssignInfo(Map<String,Object> map);
	/**
	 * 委外催收中批量分派
	 * @param map
	 * @return
	 */
	int updateAssignByCallId(Map<String,Object> map);

	PageData countOverdueMoney(Page page);

	/**
	 * 通过催收编号查询案件信息
	 */
	CallLoanInfo queryByCallLoanNid(String callLoanNid);

	/**
	 * 批量分派查询到
	 * @param page
	 * @return
	 */
	List<CallLoanInfoDto> selectCallLoanNidByPageDate(Page page);

	/**
	 * 更改状态
	 */
	void updateUserIdsByToBe2(Map<String, Object> para);

	/**
	 * 委外公司批量分派
	 * @param para
	 */
	void updateUserIdsByToBeWieWai(Map<String, Object> para);
	/**
	 * 下催记更新案件主表中的催收结果
	 */
	int updateCallLoanInfoCallResult(CallLoanInfo callLoanInfo);
	/**
	 * 还款后修改所有的主表金额
	 * @return
	 */
	int updateByMoney(CallLoanInfo info);
	/**
	 * 更改罚息减免的数据
	 * @param info
	 * @return
	 */
	int updateReduMoney(CallLoanInfo info);
	/**
	 * 内催的回到待催收中
	 * @param map
	 * @return
	 */
	int updateInnerBackOne(Map<String, Object> map);
	/**
	 * 外催的回到待催收中
	 * @param map
	 * @return
	 */
	int updateOutBackOne(Map<String, Object> map);
	
	//更新罚息退回金额
	int updateReturnFeeMoney(CallLoanInfo callLoanInfo);
}